/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package bolao.service;

import bolao.dominio.Menu;
import bolao.dominio.seguranca.Recurso;
import bolao.exception.ServiceException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import org.primefaces.model.TreeNode;

/**
 *
 * @author 
 */
@Stateless
public class MenuService {

    @EJB
    private CRUDService crudService;

    public List<Menu> getItensDeMenuDaRaiz() {
        return crudService.executeQuery("select m from Menu m where m.menuPai is null");
    }

    public List<Recurso> getTodasPaginas() {
        return crudService.executeQuery("select r from Recurso r order by r.nomeRecurso");
    }

    public void excluirMenu(Menu menu) {
        if (menu.getItensFilhos() != null && menu.getItensFilhos().size() > 0) {
            throw new ServiceException("Não é possível excluir o item de menu selecionado pois o mesmo possui itens vinculados");
        }
        
        Menu pai = menu.getMenuPai();
        List<Menu> filhos = pai.getItensFilhos();
        Collections.sort(filhos);

        int indiceMenuAExcluir = filhos.indexOf(menu);

        List<Menu> menusAlterados = new ArrayList<Menu>();

        if (indiceMenuAExcluir < filhos.size() - 1) {
            for (int i = indiceMenuAExcluir + 1; i < filhos.size(); i++) {
                Menu m = filhos.get(i);
                m.setOrdem(m.getOrdem() - 1);
                menusAlterados.add(m);
            }
        }

        pai.removeMenuFilho(menu);

        crudService.saveArray(menusAlterados.toArray());
        crudService.delete(menu);

    }
}
